/**
 * 捕获异常是使用try/catch的方式来处理，因为await后面跟着的是Promise对象，当有异常的情况下会被Promise对象的内部
 * catch捕获，而await就是一个then的语法糖，并不会捕获异常, 那就需要使用try/catch来捕获异常，并进行相应的逻辑处理。
 * @param promise
 * @returns {Promise<T | *[]>}
 */
export default function to(promise) {
  // eslint-disable-next-line no-prototype-builtins
  if (!promise || !Promise.prototype.isPrototypeOf(promise)) {
    return new Promise((resolve, reject) => {
      reject(new Error(`${promise}\r\n requires promises as the param"`))
    }).catch(err => {
      return [err, null]
    })
  }
  return promise
    .then(data => {
      return [null, data]
    })
    .catch(err => [err])
}
